/**
 * @author : niu niu
 * @version : 1.0.0
 * @date : 2023/1/5 22:27
 * 懒汉模式：当使用到的时候再去进行实例化
 * 1.先把构造方法改为私有
 * 2.创建一个实例不进行初始化
 *
 * 3.对外提供一个方法，来获取实例，并进行初始化
 *      正确加锁，双重check，保证不进行指令重排序volatile
 */
public class ThreadDemo24 {
}

class SingleTon2 {
    private SingleTon2() {
    }

    private static volatile SingleTon2 instance = null; //保证不进行指令重排序 volatile

    public static SingleTon2 getInstance() {
        // 类对象，一个程序只有一个，jvm保证的
        if (instance == null) {// 判断是否加锁 //为了性能
            synchronized (SingleTon2.class) {
                if (instance==null){// 避免重复实例化，判断是否初始化 //不可替代
                    instance = new SingleTon2();
                }
            }
        }
        return instance;
    }
}